<?php
include_once 'clases_php/SistemaJuego.php';
include_once 'funciones.php';
class TodosContraTodos implements sistemaJuego{
	//Metodos Auxiliares
	public $nombre;

	function __construct($nombre){
		$this->nombre=$nombre;
	}
	
	function sistemaJuego($nombre){
		$this->nombre=$nombre;
	}

	function intercambiar($a1,$a2){
		$primeroa2=$a2[0];
		$ultimoa1=array_pop($a1);
		$a2=array_slice($a2, 1,count($a2));
		array_push($a2, $ultimoa1);
		$a1t[]=$primeroa2;
		foreach ($a1 as $it) {
			array_push($a1t, $it);
		}
		$a1=$a1t;
		$res[]=$a1;
		$res[]=$a2;
		return $res;
	}

	//Autor: Gustavo Adolfo Bello
	//Comp: Sortear Calendario
	//Clase: MiScore
	//Pre: partidos ni equipos pueden ser vacíos.
	//Pos: Se Reparten aleatoriamente los equipos en las jornadas creadas previamente,
	// respetando las reglas del juego y se retorna el arreglo de Partidos sorteados.
	function sortearCalendario($partidos,$equipos) {
		foreach ($partidos as $p){
			$p->equipos=array();
		}
		$nPartidos=sizeof($partidos);
		$ne=sizeof($equipos);
		$nem=(int)($ne/2);
		$nf=$nPartidos/$nem;
		$equipo1=$equipos[0];
		$cola=array_slice($equipos, 1,count($equipos));
		if($ne%2!=0)array_push($cola, new Equipo("anonimo"));
		//	print_r($partidos);
		
		usort($partidos, 'sort_partidos');

		$sc=(int)(count($cola)/2);
		$a1=array_slice($cola, 0,$sc);
		$a2=array_slice($cola, $sc,count($cola));

		$p=0;
		$jornadas=$this->calcularJornadas(count($equipos));
		for($f=0;$f<$jornadas;$f++){
			if($a2[0]->nombre!="anonimo"){
				$partidos[$p]->equipos[]=$equipo1;
				$partidos[$p]->equipos[]=$a2[0];
//				echo "partido fecha".$partidos[$p]->fecha." e1 ".$partidos[$p]->equipos[0]->nombre." e2 ".$partidos[$p]->equipos[1]->nombre."<br/>";
				$p++;
			}
			for ($i=0;$i<(count($a1));$i++){

				if($a1[$i]->nombre!="anonimo"&&$a2[$i+1]->nombre!="anonimo"){

					$partidos[$p]->equipos[]=$a1[$i];
					$partidos[$p]->equipos[]=$a2[$i+1];

//					echo "partido fecha ".$partidos[$p]->fecha." e1 ".$partidos[$p]->equipos[0]->nombre." e2 ".$partidos[$p]->equipos[1]->nombre."<br/>";
					$p++;
				}
			}
			$res=$this->intercambiar($a1,$a2);
			$a1=$res[0];
			$a2=$res[1];

		}
		echo "<br/> <br/>";

		return $partidos;

	}


	function traerJornada(){

	}
	function calcularJornadas($numEquipos){
		$numPartidos=($numEquipos*($numEquipos-1))/2;
		$numPartidosSim=0;
		if($numEquipos % 2 == 0){
			$numPartidosSim=$numEquipos/2;
		}else{
			$numPartidosSim=(int)(($numEquipos-1)/2);
		}
		return $numPartidos/$numPartidosSim;
	}


	
	
	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: SistemaJuego
	//Pre: fila no puede ser vacía y debe contener 9 campos
	//Pos: Se retorna el número de puntos calculados para el equipo entrante.
	function calcularPuntosEquipo($fila){
		$puntos = 0;
		if($fila['6']!=0) $puntos= $puntos + ($fila['6'])*3; //Sumando puntos de partidos ganados
		if($fila['8']!=0) $puntos= $puntos + $fila['8']; //Sumando puntos de partidos empatados
	return $puntos;
	}
	
	
	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: SistemaJuego
	//Pre: tabla no puede ser vacía y cada fila debe tener 5 columnas inicializadas.
	//Pos: En caso de haber 2 equipos con el mismo número de puntos (columna 1)
	//los desempata o por mayor número de goles o por más goles como local.
	function desempatar($tabla){
		$tabla2 = $tabla;
		foreach($tabla as $i => $t){
			foreach($tabla2 as $j => $r){
				
				if($i!=$j && $tabla[$i][9]!=0 && $tabla[$i][1]==$tabla[$j][1]){
					//echo $t['0']." ".$r['0']." ".$t['9']." ".$r['9']."<br>";
					if($tabla[$i][2]> $tabla[$j][2]){ $tabla[$i][9] = $tabla[$i][9]+1; }
					else if ($tabla[$i][2]< $tabla[$j][2]){ $tabla[$j][9] = $tabla[$j][9]+1;}
					else if ($tabla[$i][4]< $tabla[$j][4]){ $tabla[$j][9] = $tabla[$j][9]+1;}
					else if ($tabla[$i][4]> $tabla[$j][4]){ $tabla[$i][9] = $tabla[$i][9]+1;}
					else $tabla[$i][9] = $tabla[$i][9]+1; //Casi imposible llegar aquí
					//echo $tabla[$i][9]." ".$tabla[$j][9]." ".$tabla[$i][0]." ".$tabla[$j][0]."<br>";
				}
			}
		}
		return $tabla;
	}
	
	//Autor: Luis Gabriel López
	//Comp: Consultar Tabla Posiciones
	//Clase: SistemaJuego
	//Pre: equipo y partidos son arreglos de equipos y partidos respectivamente.
	//Pos: Retorna una tabla con los resultados en Puntos, Goles a Favor (GF), Goles en Contra (GC), 
	// Goles como Local (GL), Partidos Ganados (PG), Partidos Perdidos (PP), Partidos Empatados (PE)
	// de los equipos inscritos en el torneo seleccionado. 
	// Si el partido no tiene equipos registrados, no retorna nada.
	function calcularTablaPosiciones($equipos, $partidos){
		$sale = null; //Aquí se crea la tabla que se va a retornar
		$i=0; //El contador de filas
		
		
		
		//Se va a verificar para todos los equipos del torneo...
		if($equipos != null){
			foreach($equipos as $k => $e){
				$sale[$i][0] = $e->nombre; //Primera columna, nombre de los equipos
				$sale[$i][1] = 0; //Es puntos, pero se diligencia al final, aquí solo se inicializa.
				
				//Se compara con todos los partidos del torneo para así llenar la tabla
				if($partidos!=null){
					foreach($partidos as $j => $p){
						//Llenando si el equipo está en el partido como local...
						if(isset($p->equipos['0']) && $p->equipos[0] == $e->nombre){
												
							//Se inicializa todo en 0, para no usar isset() más adelante o si algo no se llenú.
							if(!isset($sale[$i]['1'])) $sale[$i]['1'] = 0;
							if(!isset($sale[$i]['2'])) $sale[$i]['2'] = 0;
							if(!isset($sale[$i]['3'])) $sale[$i]['3'] = 0;
							if(!isset($sale[$i]['4'])) $sale[$i]['4'] = 0;
							if(!isset($sale[$i]['5'])) $sale[$i]['5'] = 0;
							if(!isset($sale[$i]['6'])) $sale[$i]['6'] = 0;
							if(!isset($sale[$i]['7'])) $sale[$i]['7'] = 0;
							if(!isset($sale[$i]['8'])) $sale[$i]['8'] = 0;
							
							if($sale[$i]['2']==0 && $p->golesL!=-1 ) $sale[$i][2] = $p->golesL; //Suma Goles a Favor
							else if($p->golesL!=-1) $sale[$i][2] = $sale[$i][2] + $p->golesL; //Suma Goles a Favor
							
							if($sale[$i]['3']==0 && $p->golesV!=-1) $sale[$i][3] = $p->golesV; //Suma Goles en Contra
							else if($p->golesV!=-1) $sale[$i][3] = $sale[$i][3] + $p->golesV; //Suma Goles en Contra
							
							if($sale[$i]['4']==0 && $p->golesL!=-1) $sale[$i][4] = $p->golesL; //Suma Goles como Local
							else if($p->golesL!=-1) $sale[$i][4] = $sale[$i][4] + $p->golesL; //Suma Goles como Local
							
							
							if(($p->golesL > $p->golesV) && $p->golesV!=-1 && $p->golesL!=-1) $sale[$i][6]++; //Suma Partidos Ganados
							else if($p->golesV > $p->golesL && $p->golesL!=-1 && $p->golesV!=-1) $sale[$i][7]++; //Suma Partidos Perdidos.
							else if($p->golesV!=-1 && $p->golesL!=-1) $sale[$i][8]++; //Suma Partidos Empatados.
						}
						
						//Llenando si el equipo está en el partido como visitante...
						else if(isset($p->equipos['1']) && $p->equipos[1] == $e->nombre){
										
							
							//Se inicializa todo en 0, para no usar isset() más adelante o si algo no se llenó.
							if(!isset($sale[$i]['1'])) $sale[$i]['1'] = 0;
							if(!isset($sale[$i]['2'])) $sale[$i]['2'] = 0;
							if(!isset($sale[$i]['3'])) $sale[$i]['3'] = 0;
							if(!isset($sale[$i]['4'])) $sale[$i]['4'] = 0;
							if(!isset($sale[$i]['5'])) $sale[$i]['5'] = 0;
							if(!isset($sale[$i]['6'])) $sale[$i]['6'] = 0;
							if(!isset($sale[$i]['7'])) $sale[$i]['7'] = 0;
							if(!isset($sale[$i]['8'])) $sale[$i]['8'] = 0;
							
							if($sale[$i]['2']==0 && $p->golesV!=-1 ) $sale[$i]['2'] = $p->golesV; //Suma Goles a Favor
							else if($p->golesV!=-1) $sale[$i][2] = $sale[$i][2] + $p->golesV; //Suma Goles a Favor
							
							if($sale[$i]['3']==0 && $p->golesL!=-1) $sale[$i][3] = $p->golesL; //Suma Goles en Contra
							else if($p->golesL!=-1) $sale[$i][3] = $sale[$i][3] + $p->golesL; //Suma Goles en Contra
							
														
							if($sale[$i]['5']==0 && $p->golesV!=-1) $sale[$i][5] = $p->golesV; //Suma Goles como Local
							else if($p->golesV!=-1) $sale[$i][5] = $sale[$i][5] + $p->golesV; //Suma Goles como Local
							
							
							if(($p->golesL < $p->golesV) && $p->golesV!=-1 && $p->golesL!=-1) $sale[$i][6]++; //Suma Partidos Ganados
							else if(($p->golesV < $p->golesL) && $p->golesL!=-1 && $p->golesV!=-1) $sale[$i][7]++; //Suma Partidos Perdidos.
							else if($p->golesV!=-1 && $p->golesL!=-1) $sale[$i][8]++; //Suma Partidos Empatados.
						}
						else {
							if(!isset($sale[$i]['1'])) $sale[$i]['1'] = 0;
							if(!isset($sale[$i]['2'])) $sale[$i]['2'] = 0;
							if(!isset($sale[$i]['3'])) $sale[$i]['3'] = 0;
							if(!isset($sale[$i]['4'])) $sale[$i]['4'] = 0;
							if(!isset($sale[$i]['5'])) $sale[$i]['5'] = 0;
							if(!isset($sale[$i]['6'])) $sale[$i]['6'] = 0;
							if(!isset($sale[$i]['7'])) $sale[$i]['7'] = 0;
							if(!isset($sale[$i]['8'])) $sale[$i]['8'] = 0;
						}
					}
				}
				
				//Calculando los puntos del equipo
				$linea = array();
				
				$linea = $sale[$i];
				$sale[$i][1] = $sale[$i][1]+$this->calcularPuntosEquipo($linea);  //Puntos
				$sale[$i][9] = $sale[$i][1];
				$i++;
		    }
		}
		
		$sale = $this->desempatar($sale); 
		usort($sale, 'sort_tabla_posiciones');
		if($equipos == null) $sale = null;
	    return $sale;
	}
}
?>